本人目前任職於 SHOPLINE 的 Product Operation 產品維運工程師,工作內容除了處理一些店家遇到的線上異常狀況回報,或者滿足一些比較客製化的需求之外,還有基於 SRE
精神,去經營維護一些自動化監控,或是把日常高度重複性需要人工處理的任務做成自動化工具,而後者就是我開始研究 Active Model
的動機。
我們部門為了能夠把高度重複的人工維運項目,做成一個:『能夠開放客服人員填寫表單,輸入必要資訊後,便可以自動執行各種維運項目』的介面,於是發展了一個名為 SL-ERP
的工具,可以省去工程師執行重複日常工作的時間,不必凡事都工程師親力親為,符合 SRE
的精神。
這個東西其實在我接手時就已經存在有一段時間了,有一些前人做好的基底,包括 bitbucket pipeline & helm 以及 UI 介面模板等的設定,以及老舊的一些維運項目。但隨著產品迭代到了現在,這些維運項目除了已經不堪使用之外,原本的做法也很不符合 Rails 的精神
。
於是我在進行了一段時間的研究後,基於以下兩個方向,著手重構這個老舊的專案:
因為是給公司內部客服使用,所以不需要華麗的介面,只要簡單操作,可以填表自動執行維運項目就好。
最好是只需要專注在想擴充的
維運 script
就好,不必管 Rails 其他的東西,像是 controller, view 等等。
畢竟自動化工具的存在意義就是為了讓工程師省時間
,如果開發成本還要再大於日常人工處理的成本,那就是本末倒置了。
核心精神就是:擴充快速、管理方便、維護容易、code 要簡潔好看!
於是,我一路上透過看 Rails 文件,甚至到處爬 source code,尋找原生最合適的方式來完成各種基本功能,所以我開始研究 Active Model
。
透過引入 Active Model
的 form object 概念,我可以把自動化工具基本所需共用的流程,包括留下執行紀錄以及自動產生輸入表單等等做在抽象層,並透過繼承的方式,讓後人可以很方便的擴充各自的維運項目,並且仍然保有各自的客製靈活性。
而且,利用他本身的功能,可以用最簡潔的方式,自動 render 各維運項目需要不同的 form,以及可以依照各維運項目要求不同,進行各自的 validation(防呆機制),完全不需要再寫 view & controller !
接下來,我將會一點一點的將我學到、爬到的各種方法與使用技巧,通通分享給你!
我們明天見!